package org.example.projecttwo.service.Icommon;

import org.springframework.data.redis.core.ZSetOperations;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * 通用Redis服务接口
 */
public interface IRedisService {
    /**
     * 设置带过期时间的值
     * @param key 键
     * @param value 值
     * @param timeout 过期时间
     * @param unit 时间单位
     */
    void set(String key, Object value, long timeout, TimeUnit unit);

    /**
     * 获取值
     * @param key 键
     * @return 值
     */
    Object get(String key);

    /**
     * 删除键
     * @param key 键
     */
    void delete(String key);

    /**
     * 检查键是否存在
     * @param key 键
     * @return 是否存在
     */
    boolean hasKey(String key);

    /**
     * 设置键的过期时间
     * @param key 键
     * @param timeout 过期时间
     * @param unit 时间单位
     */
    void expire(String key, long timeout, TimeUnit unit);

    /**
     * 获取ZSet操作对象
     * @return ZSet操作对象
     */
    ZSetOperations<String, Object> zSetOps();

    /**
     * 从ZSet中获取指定分数范围内的元素
     * @param key 键
     * @param min 最小分数：0
     * @param max 最大分数：当前时间
     * @return 元素集合
     */
    Set<Object> zRangeByScore(String key, double min, double max);

}